package com.neutech.solar.entity;




import com.neutech.solar.constant.Constant;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class AbstractFrame extends Frame{
    /*private String title;
    public AbstractFrame(String title){
        this.title = title;
        init();
    }*/
    public void init(String title){
        // 大小
        this.setSize(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        // 位置
        //  this.setLocation(0,0);
        // 设置窗口可见性
        this.setVisible(true);
        // 添加关闭窗口的方法
        // 匿名内部类
        // 在参数列表中,有接口或者抽象类为参数时,并且实现接口的方法只在此地方用一次
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        // 设置题目
        this.setTitle(title);
        // 设置窗口的不可修改
        this.setResizable(false);
        // 相对于屏幕中间显示
        this.setLocationRelativeTo(null);
        //启动多线程
         new MyThread().start();
    }



    //添加多线程的成员内部类
    class MyThread extends Thread{
        

        //java实现多线程,进行重新绘制窗口
        @Override
        public void run() {
            for(;;){
               repaint(); // 自动调用paint()
                // 当前线程间隔时间
                try {
                    Thread.sleep(40); // ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
        // 解决图片闪烁的问题，用双缓冲方法解决闪烁问题
            Image backImg = null;

            // 重写update()方法，在窗口的里层添加一个虚拟的图片
            @Override
            public void update(Graphics g) {
                if (backImg == null) {
                    // 如果虚拟图片不存在，创建一个和窗口一样大小的图片
                    backImg = createImage(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
                }
                // 获取到虚拟图片的画笔
                Graphics backg = backImg.getGraphics();
                Color c = backg.getColor();
                backg.setColor(Color.WHITE);
                backg.fillRect(0, 0, Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
                backg.setColor(c);
                // 调用虚拟图片的paint()方法，每50ms刷新一次
                paint(backg);
                g.drawImage(backImg, 0, 0, null);
        }
}






